;;; --- http://lifegoo.pluskid.org/wiki/EmacsSession.html ---

;;; 在下一次打开 Emacs 的时候如果能够恢复上一次退出的时候打开的文件以及相关 的 local variables 、 输入历史以及 kill-ring 之类的东西是一个很不错的想 法。 下面几个包就是用来解决这个问题的。

;;; 用 desktop.el 保存桌面环境
;;; desktop.el 是 Emacs 自带的包。他用来保存 Emacs 的``桌面环境'' — buffers 、以及 buffer 的文件名、 major modes 和位置等等，下一次 Emacs 启动的时候就会加载他们。
;;; 可以用 M-x desktop-save 来手动保存。或者在 ~/.emacs 里面加入：
(desktop-save-mode 1)
;;; 每当 Emacs 启动的时候，它在当前目录查找一个已经保存的桌面，所以你可以在不同的目录保存不同的桌面，启动的时候的``当前目录''就是 Emacs 加载桌面文件的目录。也可以用 M-x desktop-change-dir 保存当前桌面， 然后加载另外一个目录下的桌面文件。 M-x desktop-revert 可以推回到先前加载的那个桌面。
;;; 可以在 Emacs 启动的时候使用 --no-desktop 选项禁止加载桌面。
;;; 默认情况下，所有的 buffers 都被一次加载起来。当有很多文件要加载的时候可能会非常慢，不过你可以指定 desktop-restore-eager 变量来规定立即加载的文件的最大数目，而剩下的文件会在 Emacs 空闲的时候慢慢加载。
;;; 如果你觉得当前桌面里面的东西太多了，可以用 M-x desktop-clear 来把桌面清空一下。如果你想保留某些 buffer ，可以设定你 desktop-clear-preserve-buffers-regexp 变量来控制保留哪些 buffer ，这是一个正则表达式，如果 buffer 的名字匹配了这个正则表达式，那么他将会被保留下来。不过一个更好的办法是使用 ibuffer 来把不想要的 buffer 关掉再保存桌面。

;;; 用 session.el 来保存相关变量
;;; 使用简介
;;; session.el 可以保存很多东西，例如输入历史(像搜索、打开文件等的输入)、 register 的内容、 buffer 的 local variables 以及 kill-ring 和最近修改 的文件列表等。非常有用。
;;; session.el 不是 Emacs 自带的，可以在 SourceForge 上找到最新版本。
;;; 把里面的 session.el 解压出来放到加载路径之后。在 ~/.emacs 里面加入：
(require 'session)
(add-hook 'after-init-hook
          'session-initialize)
;;; 就可以使用 session.el 提供的功能了。很多东西都被恢复过来，几乎就像从来 没有关闭过 Emacs 一样。而且它还在菜单栏里面添加了打开最近修改的文件的菜 单项。
;;; 注意事项
;;; 如果同时在使用 org-mode ，那么有可能造成退出的时候发生死循环而无法 退出 的情况，这是因为 org-mode 里面的 org-mark-ring 是一个循环结构，目前可 以通过在 session 设置不对他进行保存来解决这个问题：
(add-to-list 'session-globals-exclude
             'org-mark-ring)
;;; 但是这并不是一个解决办法，因为哪个包里面有循环变量这个是不能完全预料到 的，最根本的解决办法还是要从 session.el 本身下手。今天我就遇到了两个问 题，一个好像是由于 org-mode 里面的另外一个循环变量引起的，还有就是 AucTeX 有关的，也不知道是 AucTeX 的原因还是 session.el 的原因，导致 Emacs 一打开 TeX 文件立即断错误退出，我把 ~/.session 删除之后就没有这 个情况了。看来这个扩展还需要继续发展呢。

;;; --- http://lifegoo.pluskid.org/wiki/EmacsSession.html ---^


;;; --- http://sourceforge.net/projects/emacs-session/files/?source=navbar ---
